查看原文
其他

第42篇:Fortify代码审计命令行下的使用与调用方法

abc123info ABC123安全研究实验室 2023-02-12

 Part1 前言 

最近感染了新冠,大病初愈,没气力写复杂的文章了,索性就把《代码审计工具系列教程》写完吧。前面几期分别讲了Fortify、Checkmarx、Coverity、Klocwork等代码审计工具的使用,反响还不错,本期讲讲Fortify命令行下的调用方法。Fortify的命令行程序名字是sourceanalyzer.exe,如果您没用过这个程序,那Fortify可真是需要好好补补课了,如果您在为如何去调用Fortify实现自动化代码审计平台,这篇文章可以帮到您


 Part2 Fortify审计代码的4个阶段 

Fortify完成代码审计工作,大致需要以下4个步骤:

 1    Clean:清除阶段。主要是清除之前转换的NST。命令大致如下:sourceanalyzer -b proName -clean

 2    Translation:转换阶段。源代码内部格式转换阶段,将各种源代码转换成Fortify所支持的特有格式。

 3    Show-File:查看阶段。在完成转换之后,展示这次转换的文件,多用于检查转换是否成功完整。命令大致如下:sourceanalyzer -b proName -show-files

 4   Scan:分析引擎扫描阶段。命令大致如下:sourceanalyzer -b proName -Xmx1250m -scan -f proName.fpr

与代码审计结果最相关的其实是第2步的转换阶段,使用起来是有很多技巧的。对于JavaWeb项目,大致需要对以下文件进行转换:

1.   转换.Java文件。

2.   转换.jsp文件。

3.   转换JavaWeb的configuration配置文件如.xml、.properties文件。

sourceanalyzer -b proName “mydirectory/myfile.xml”


 Part3 常用的命令行 

Fortify代码审计工具的命令行程序是sourceanalyzer.exe,文件路径是D:\Program\Foritfys\Fortify_SCA_and_Apps_22.1.0\bin。执行以下命令sourceanalyzer --help可以查看Fortify的命令行程序的各个参数的使用说明。


具体详细的使用说明还是要看Fortify说明书,我这里给出几个比较常用的参数的使用说明吧

1.  Fortify支持的指定文件路径的通配符:'*' 匹配部分文件名 , '**' 递归地匹配目录。

2.  -clean 清除之前转换的NST。

3.  -b 定义一个扫描项目的名称。

4.  -encoding "UTF-8" 设置中文编码。

5.  -cp "**/*.jar"  主要用于java项目,有的文档称之为classpath,也可以理解为jar包的路径。

6.  -source 1.7 指定你要扫描的Java项目是在什么版本的JDK上编写的,可用的值是1.7, 1.8,1.9, 7, 8, 9, 10, 11, 12, 13, 14, 17。默认的值是"1.8"。

7.  -f result.fpr 生成一个fpr文件,以后可以用图形界面查看这个结果文件。

8.   -64 使用64位,一般都需要加上。

9.  -Xmx 指定Fortify静态代码分析器使用的最大内存量,比如-Xmx10000m。官方说明书不建议值取在32 GB和48 GB 之间,因为取值32G或者更小的内存,反而会增加性能。如果扫描需要超过32 GB,则建议取值为64 GB或更多。

10.  -verbose 在控制台输出详细信息。

11.  -quick  以降低精准度实现快速扫描,如果你的项目非常大,可以加上该选项。

12.  -p| -scan-precision  使用快速扫描以扫描精度级别扫描项目。扫描精度级别越低,扫描性能越快。有效值为1、2、3和4。

13.  -show-build-ids 显示本机曾经扫描过的Build ID,也就是项目名称。

14.  -show-build-tree 显示每一个文件在转换时所依赖的文件。

15.  -show-build-warnings 查看在转换过程中所有的警告信息。

16.  -exclude "**/Test/*.java" 排查Test编译文件,排除对测试文件的审计,减少Fortify的工作量。

17.  -logfile 指定Fortify静态代码分析器创建的日志文件。


 Part4 实战过程 

接下来给出一个扫描webgoat代码的Fortify命令行使用过程,具体过程比这个要复杂,我给出一个通用步骤吧:

 1   清理之前转换的NST:

sourceanalyzer -b test -clean


 2   翻译.Java代码文件:

sourceanalyzer -b test -64 -encoding "UTF-8" -source 1.7 -Xmx6000m -cp "WEB-INF/lib/*.jar" "./**/*.java" -verbose


 3   翻译.jsp代码文件:

sourceanalyzer -b test -64 -encoding "UTF-8" -source 1.7 -Xmx6000m -cp "WEB-INF/lib/*.jar" "WEB-INF/**/*.jsp" -verbose


 4   翻译JavaWeb配置文件:

sourceanalyzer -b test -64 -encoding "UTF-8" -source 1.7 -Xmx6000m "./**/*.xml" -verbose


 5   开始扫描过程:

sourceanalyzer -b test -Xmx6000m -scan -f test.fpr


扫描完成之后,使用auditworkbench图形界面打开test.fpr查看扫描结果。


查看Diagram图表的具体使用如下:


使用ReportGenerator程序将.fpr文件转换成pdf文件。


如下图所示,生成了pdf文件。


 Part5 总结 

Help: Which friend has a cracked or trial version of Codesecure, Klockwork, and IBM Security AppScan Source? If it's convenient, send it to me for trial, and I guarantee that it will not be used for commercial purposes。Thanks♪(・ω・)ノ。Contact me by e-mail : 0day123abc#gmail.com(replace # with @)。


专注于网络安全技术分享,包括红队攻防、蓝队分析、渗透测试、代码审计等。每周一篇,99%原创,敬请关注

Contact me: 0day123abc#gmail.com(replace # with @)

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存